3.3.7. コンテナをエミュレートする
Containers usually are sequences (such as lists or tuples) or mappings (like dictionaries), but can represent other containers as well.
「コンテナはたいていシーケンスかマッピング」(以下略)
The first set of methods is used either to emulate a sequence or to emulate a mapping;
The first setが指しているのは
__len__
__length_hint__
__getitem__
__setitem__
__delitem__
__missing__
__iter__
__reversed__
__reversed__() メソッドが定義されていない場合、 reversed() 組込み関数は sequence プロトコル (__len__() と __getitem__()) を使った方法にフォールバックします。
the difference is that for a sequence, the allowable keys should be the integers k for which 0 <= k < N where N is the length of the sequence, or slice objects, which define a range of items.
「シーケンスで許されるキーは整数またはスライスオブジェクト」
It is also recommended that mappings provide the methods keys(), values(), items(), get(), clear(), setdefault(), pop(), popitem(), copy(), and update() behaving similar to those for Python's standard dictionary objects.
マッピングオブジェクトが提供するのがおすすめされるメソッド一覧
The collections.abc module provides a MutableMapping abstract base class to help create those methods from a base set of __getitem__(), __setitem__(), __delitem__(), and keys().
Mutable sequences should provide methods append(), count(), index(), extend(), insert(), pop(), remove(), reverse() and sort(), like Python standard list objects.
可変なシーケンスが提供すべきメソッド一覧
Finally, sequence types should implement addition (meaning concatenation) and multiplication (meaning repetition) by defining the methods __add__(), __radd__(), __iadd__(), __mul__(), __rmul__() and __imul__()
+による連結と*による繰り返しの実装
他の算術演算子は定義すべきでない
It is recommended that both mappings and sequences implement the __contains__() method to allow efficient use of the in operator;
in演算子が使う__contains__メソッド
for mappings, in should search the mapping's keys;
for sequences, it should search through the values.
帰属テスト演算子 (in および not in) は通常、コンテナの要素に対する反復処理のように実装されます。しかし、コンテナオブジェクトで以下の特殊メソッド(注:__contains__のこと)を定義して、より効率的な実装を行ったり、オブジェクトがイテラブルでなくてもよいようにできます。
__contains__() を定義しないオブジェクトに対しては、メンバシップテストはまず、 __iter__() を使った反復を試みます、次に古いシーケンス反復プロトコル __getitem__() を使います、
(シーケンスは要素を反復して所属を確認していくからO(N)の計算量ということか!)
It is further recommended that both mappings and sequences implement the __iter__() method to allow efficient iteration through the container